package com.tool.cn.use.search.search;

import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.tool.cn.use.search.map.EqualMap;
import com.tool.cn.use.search.type.AccurateType;

/**
 * 
 * @author wangzonghui
 * @date 2022年4月26日 上午11:05:14 
 * @Description 精确查询入口
 */
public class AccurateSearch {
	
	private Map<AccurateType,EqualMap> dataMap=new Hashtable<>();
	
	private Map<String,AccurateType> recordMap=new Hashtable<>();
	
	
	public Map<AccurateType,EqualMap> getData(){
		return dataMap;
	}
	
	/**
	 * 查询数据
	 * @param type
	 * @param key
	 * @return
	 */
	public List<String> search(AccurateType type,String key){
		
		if(dataMap.containsKey(type)) {
			return dataMap.get(type).search(key);
		}
		return new ArrayList<>();
	}
	
	/**
	 * 添加数据
	 * @param type 查询类型
	 * @param key key值
	 * @param data 数据
	 * @return
	 */
	public boolean addData(AccurateType type,String key,String data) {
		
		EqualMap equalMap;
		if(dataMap.containsKey(type)) {
			equalMap=dataMap.get(type);
		}else {
			equalMap=new EqualMap();
		}
		equalMap.add(key, data);
		dataMap.put(type, equalMap);
		
		recordMap.put(data, type);
		return true;
	}
	
	/**
	 * 删除数据
	 * @param type 类型
	 * @param key key值
	 * @param data 数据
	 * @return
	 */
	public boolean removeData(AccurateType type,String key,String data) {
		if(dataMap.containsKey(type)) {
			if(!dataMap.get(type).remove(key, data)) {
				return false;
			}
			
			recordMap.remove(data);
		}
		return true;
	}
	
	/**
	 * 删除数据
	 * @param type 类型
	 * @param data 数据
	 * @return
	 */
	public boolean removeData(AccurateType type,String data) {
		if(dataMap.containsKey(type)) {
			if(!dataMap.get(type).remove(data)) {
				return false;
			}
			
			recordMap.remove(data);
		}
		return true;
	}
	
	/**
	 * 删除数据
	 * @param data 数据
	 * @return
	 */
	public boolean removeData(String data) {
		if(recordMap.containsKey(data)) {
			removeData(recordMap.get(data), data);
		}
		return true;
	}
	
	/**
	 * 获取所有值
	 * @return
	 */
	public Set<String> getValue(){
		return recordMap.keySet();
	}

}
